#!/bin/bash

# 清理构建脚本
# 作者: auth-cloud
# 日期: 2024-01-01

# 设置颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 项目根目录
PROJECT_ROOT=$(cd "$(dirname "$0")/.." && pwd)
echo -e "${GREEN}项目根目录: ${PROJECT_ROOT}${NC}"

# 清理Maven缓存
clean_maven_cache() {
    echo -e "${YELLOW}清理Maven缓存...${NC}"
    mvn dependency:purge-local-repository -DmanualInclude="org.projectlombok:lombok"
    echo -e "${GREEN}Maven缓存清理完成${NC}"
}

# 清理项目构建文件
clean_project() {
    echo -e "${YELLOW}清理项目构建文件...${NC}"
    cd "$PROJECT_ROOT"
    
    # 删除target目录
    find . -name "target" -type d -exec rm -rf {} + 2>/dev/null || true
    
    # 删除编译缓存
    find . -name ".classpath" -delete 2>/dev/null || true
    find . -name ".project" -delete 2>/dev/null || true
    find . -name ".settings" -type d -exec rm -rf {} + 2>/dev/null || true
    
    echo -e "${GREEN}项目构建文件清理完成${NC}"
}

# 重新编译项目
rebuild_project() {
    echo -e "${YELLOW}重新编译项目...${NC}"
    cd "$PROJECT_ROOT"
    
    # 使用Maven包装器编译
    if [ -f "mvnw" ]; then
        ./mvnw clean compile -DskipTests
    else
        mvn clean compile -DskipTests
    fi
    
    if [ $? -eq 0 ]; then
        echo -e "${GREEN}项目编译成功${NC}"
    else
        echo -e "${RED}项目编译失败${NC}"
        exit 1
    fi
}

# 检查Java版本
check_java_version() {
    echo -e "${YELLOW}检查Java版本...${NC}"
    if command -v java &> /dev/null; then
        JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2 | cut -d'.' -f1)
        echo -e "${GREEN}当前Java版本: $(java -version 2>&1 | head -n 1)${NC}"
        
        if [ "$JAVA_VERSION" -lt 21 ]; then
            echo -e "${RED}警告: Java版本过低，建议使用JDK 21或更高版本${NC}"
        fi
    else
        echo -e "${RED}错误: 未找到Java环境${NC}"
        exit 1
    fi
}

# 检查Maven版本
check_maven_version() {
    echo -e "${YELLOW}检查Maven版本...${NC}"
    if command -v mvn &> /dev/null; then
        echo -e "${GREEN}当前Maven版本: $(mvn -version | head -n 1)${NC}"
    else
        echo -e "${RED}错误: 未找到Maven环境${NC}"
        exit 1
    fi
}

# 显示帮助信息
show_help() {
    echo "用法: $0 [命令]"
    echo ""
    echo "命令:"
    echo "  clean-cache    清理Maven缓存"
    echo "  clean-project  清理项目构建文件"
    echo "  rebuild        清理并重新编译项目"
    echo "  check-env      检查Java和Maven环境"
    echo "  all            执行所有清理和检查操作"
    echo "  help           显示帮助信息"
}

# 主函数
main() {
    case "$1" in
        "clean-cache")
            clean_maven_cache
            ;;
        "clean-project")
            clean_project
            ;;
        "rebuild")
            check_java_version
            check_maven_version
            clean_project
            clean_maven_cache
            rebuild_project
            ;;
        "check-env")
            check_java_version
            check_maven_version
            ;;
        "all")
            check_java_version
            check_maven_version
            clean_project
            clean_maven_cache
            rebuild_project
            ;;
        "help"|"-h"|"--help")
            show_help
            ;;
        *)
            echo -e "${RED}错误: 未知命令: $1${NC}"
            show_help
            exit 1
            ;;
    esac
}

# 执行主函数
main "$@"
